home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 1.iso
/
HENSA
/
MATHS
/
PLPLOT
/
PLPLOT.ZIP
/
include
/
plcore.h
< prev
next >
Wrap
C/C++ Source or Header
|
1994-08-26
|
13KB
|
738 lines
/* $Id: plcore.h,v 1.24 1994/08/26 19:17:44 mjl Exp $
* $Log: plcore.h,v $
* Revision 1.24 1994/08/26 19:17:44 mjl
* Entries for conex device added; contributed by Mark Olesen.
*
* Revision 1.23 1994/07/25 06:05:35 mjl
* Added dispatch table entry for new lj_hpgl driver.
*
* Revision 1.22 1994/07/19 22:36:10 mjl
* Included plDevs.h. Driver enabling macro renamed to PLD_<driver>, where
* <driver> is xwin, ps, etc. See plDevs.h for more detail.
*
* Revision 1.21 1994/06/30 18:29:21 mjl
* Include-guards included, and the PLStream pointer made global. The latter
* will make access to PLplot state information much easier.
*/
/* plcore.h
Contains declarations for core plplot data structures. This file
should be included only by plcore.c.
*/
#ifndef __PLCORE_H__
#define __PLCORE_H__
#include "plplotP.h"
#include "drivers.h"
#include "plDevs.h"
/* Static function prototypes */
static void grline (short *, short *, PLINT);
static void grpolyline (short *, short *, PLINT);
static void grfill (short *, short *, PLINT);
static void difilt (PLINT *, PLINT *, PLINT,
PLINT *, PLINT *, PLINT *, PLINT *);
static void plGetDev (void);
static void pldi_ini (void);
static void calc_diplt (void);
static void calc_didev (void);
static void calc_diori (void);
static void calc_dimap (void);
/* Static variables */
static PLINT xscl[PL_MAXPOLY], yscl[PL_MAXPOLY];
static PLINT font, initfont, fontset; /* font control parameters */
static PLINT offset; /* offset for dispatch calls */
/*----------------------------------------------------------------------*\
* Allocate a PLStream data structure (defined in plstream.h).
*
* This struct contains a copy of every variable that is stream dependent.
* Only the first [index=0] stream is statically allocated; the rest
* are dynamically allocated when you switch streams (yes, it is legal
* to only initialize the first element of the array of pointers).
\*----------------------------------------------------------------------*/
static PLStream pls0; /* preallocated stream */
static PLINT ipls; /* current stream number */
static PLStream *pls[PL_NSTREAMS] = {&pls0}; /* Array of stream pointers */
/* Current stream pointer. Global, for easier access to state info */
PLStream *plsc = &pls0;
/*----------------------------------------------------------------------*\
* Define structure containing pointers to device dependent functions.
*
* pl_MenuStr Pointer to string that is printed in device menu.
*
* pl_DevName A short device "name" for device selection by name.
*
* pl_type 0 for file-oriented device, 1 for interactive
* (the null driver uses -1 here)
*
* pl_init Initialize device. This routine may also prompt the user
* for certain device parameters or open a graphics file
* (see note). Called only once to set things up. Certain
* options such as familying and resolution (dots/mm) should
* be set up before calling this routine (note: some drivers
* ignore these).
*
* pl_line Draws a line between two points.
*
* pl_polyline Draws a polyline (no broken segments).
*
* pl_eop Finishes out current page (see note).
*
* pl_bop Set up for plotting on a new page. May also open a new
* a new graphics file (see note).
*
* pl_tidy Tidy up. May close graphics file (see note).
*
* pl_state Handle change in PLStream state
* (color, pen width, fill attribute, etc).
*
* pl_esc Escape function for driver-specific commands.
*
*
* Notes:
*
* Most devices allow multi-page plots to be stored in a single graphics
* file, in which case the graphics file should be opened in the pl_init()
* routine, closed in pl_tidy(), and page advances done by calling pl_eop
* and pl_bop() in sequence. If multi-page plots need to be stored in
* different files then pl_bop() should open the file and pl_eop() should
* close it. Do NOT open files in both pl_init() and pl_bop() or close
* files in both pl_eop() and pl_tidy().
\*----------------------------------------------------------------------*/
typedef struct {
char *pl_MenuStr;
char *pl_DevName;
int pl_type;
void (*pl_init) (PLStream *);
void (*pl_line) (PLStream *, short, short, short, short);
void (*pl_polyline) (PLStream *, short *, short *, PLINT);
void (*pl_eop) (PLStream *);
void (*pl_bop) (PLStream *);
void (*pl_tidy) (PLStream *);
void (*pl_state) (PLStream *, PLINT);
void (*pl_esc) (PLStream *, PLINT, void *);
} PLDispatchTable;
/*----------------------------------------------------------------------*\
* Initialize dispatch table.
*
* Each device is selected by the appropriate define, passed in from the
* makefile. When installing plplot you may wish to exclude devices not
* present on your system in order to reduce screen clutter.
*
* If you hit a <CR> in response to the plinit() prompt, you get the FIRST
* one active below, so arrange them accordingly for your system (i.e. all
* the system-specific ones should go first, since they won't appear on
* most systems.)
\*----------------------------------------------------------------------*/
static PLDispatchTable dispatch_table[] = {
/* Terminal types */
#ifdef PLD_next
{
"NeXT Display",
"next",
1,
plD_init_nx,
plD_line_nx,
plD_polyline_nx,
plD_eop_nx,
plD_bop_nx,
plD_tidy_nx,
plD_state_nx,
plD_esc_nx
},
#endif
#ifdef PLD_amiga
{
"Amiga Window",
"amiwn",
1,
plD_init_amiwn,
plD_line_amiwn,
plD_polyline_amiwn,
plD_eop_amiwn,
plD_bop_amiwn,
plD_tidy_amiwn,
plD_state_amiwn,
plD_esc_amiwn
},
#endif
#ifdef PLD_os2pm
{
"OS/2 PM Screen",
"os2",
1,
plD_init_os2,
plD_line_os2,
plD_polyline_os2,
plD_eop_os2,
plD_bop_os2,
plD_tidy_os2,
plD_state_os2,
plD_esc_os2
},
#endif
#ifdef PLD_xwin
{
"X-Window (Xlib)",
"xwin",
1,
plD_init_xw,
plD_line_xw,
plD_polyline_xw,
plD_eop_xw,
plD_bop_xw,
plD_tidy_xw,
plD_state_xw,
plD_esc_xw
},
#endif
#ifdef PLD_dp
{
"Tcl-DP/TK Window",
"dp",
1,
plD_init_dp,
plD_line_tk,
plD_polyline_tk,
plD_eop_tk,
plD_bop_tk,
plD_tidy_tk,
plD_state_tk,
plD_esc_tk
},
#endif
#ifdef PLD_tk
{
"Tcl/TK Window",
"tk",
1,
plD_init_tk,
plD_line_tk,
plD_polyline_tk,
plD_eop_tk,
plD_bop_tk,
plD_tidy_tk,
plD_state_tk,
plD_esc_tk
},
#endif
#ifdef PLD_linuxvga
{
"Linux console VGA Screen",
"vga",
1,
plD_init_vga,
plD_line_vga,
plD_polyline_vga,
plD_eop_vga,
plD_bop_vga,
plD_tidy_vga,
plD_state_vga,
plD_esc_vga
},
#endif
#ifdef PLD_mgr
{
"MGR Window",
"mgr",
1,
plD_init_mgr,
plD_line_mgr,
plD_polyline_mgr,
plD_eop_mgr,
plD_bop_mgr,
plD_tidy_mgr,
plD_state_mgr,
plD_esc_mgr
},
#endif
#ifdef PLD_win3
{
"Windows 3.x Driver",
"win3",
1,
plD_init_win3,
plD_line_win3,
plD_polyline_win3,
plD_eop_win3,
plD_bop_win3,
plD_tidy_win3,
plD_state_win3,
plD_esc_win3
},
#endif
#if defined (_MSC_VER) && defined (VGA) /* graphics for msc */
{
"DOS VGA Screen (msc)",
"vga",
1,
plD_init_vga,
plD_line_vga,
plD_polyline_vga,
plD_eop_vga,
plD_bop_vga,
plD_tidy_vga,
plD_state_vga,
plD_esc_vga
},
#endif
#ifdef PLD_bgi
{
"VGA Screen (BGI)",
"vga",
1,
plD_init_vga,
plD_line_vga,
plD_polyline_vga,
plD_eop_vga,
plD_bop_vga,
plD_tidy_vga,
plD_state_vga,
plD_esc_vga
},
#endif
#ifdef PLD_gnusvga
{
"SVGA Screen (djgpp)",
"vga",
1,
plD_init_vga,
plD_line_vga,
plD_polyline_vga,
plD_eop_vga,
plD_bop_vga,
plD_tidy_vga,
plD_state_vga,
plD_esc_vga
},
#endif
#ifdef PLD_emxvga /* graphics for emx+gcc */
{
"VGA Screen (emx)",
"vga",
1,
plD_init_vga,
plD_line_vga,
plD_polyline_vga,
plD_eop_vga,
plD_bop_vga,
plD_tidy_vga,
plD_state_vga,
plD_esc_vga
},
#endif
#ifdef PLD_xterm
{
"Xterm Window",
"xterm",
1,
plD_init_xterm,
plD_line_tek,
plD_polyline_tek,
plD_eop_tek,
plD_bop_tek,
plD_tidy_tek,
plD_state_tek,
plD_esc_tek
},
#endif
#ifdef PLD_tek4010
{
"Tektronix Terminal (4010)",
"tekt",
1,
plD_init_tekt,
plD_line_tek,
plD_polyline_tek,
plD_eop_tek,
plD_bop_tek,
plD_tidy_tek,
plD_state_tek,
plD_esc_tek
},
#endif
#ifdef PLD_tek4107
{
"Tektronix Terminal (4105/4107)",
"tek4107t",
1,
plD_init_tek4107t,
plD_line_tek,
plD_polyline_tek,
plD_eop_tek,
plD_bop_tek,
plD_tidy_tek,
plD_state_tek,
plD_esc_tek
},
#endif
#ifdef PLD_mskermit
{
"MS-Kermit emulator",
"mskermit",
1,
plD_init_mskermit,
plD_line_tek,
plD_polyline_tek,
plD_eop_tek,
plD_bop_tek,
plD_tidy_tek,
plD_state_tek,
plD_esc_tek
},
#endif
#ifdef PLD_versaterm
{
"Versaterm vt100/tek emulator",
"versaterm",
1,
plD_init_versaterm,
plD_line_tek,
plD_polyline_tek,
plD_eop_tek,
plD_bop_tek,
plD_tidy_tek,
plD_state_tek,
plD_esc_tek
},
#endif
#ifdef PLD_vlt
{
"VLT vt100/tek emulator",
"vlt",
1,
plD_init_vlt,
plD_line_tek,
plD_polyline_tek,
plD_eop_tek,
plD_bop_tek,
plD_tidy_tek,
plD_state_tek,
plD_esc_tek
},
#endif
#ifdef PLD_conex
{
"Conex vt320/tek emulator",
"conex",
1,
plD_init_conex,
plD_line_tek,
plD_polyline_tek,
plD_eop_tek,
plD_bop_tek,
plD_tidy_tek,
plD_state_tek,
plD_esc_tek
},
#endif
#ifdef PLD_dg300
{
"DG300 Terminal",
"dg300",
1,
plD_init_dg,
plD_line_dg,
plD_polyline_dg,
plD_eop_dg,
plD_bop_dg,
plD_tidy_dg,
plD_state_dg,
plD_esc_dg
},
#endif
/* File types */
#ifdef PLD_plmeta
{
"PLPLOT Native Meta-File",
"plmeta",
0,
plD_init_plm,
plD_line_plm,
plD_polyline_plm,
plD_eop_plm,
plD_bop_plm,
plD_tidy_plm,
plD_state_plm,
plD_esc_plm
},
#endif
#ifdef PLD_tek4010
{
"Tektronix File (4010)",
"tekf",
0,
plD_init_tekf,
plD_line_tek,
plD_polyline_tek,
plD_eop_tek,
plD_bop_tek,
plD_tidy_tek,
plD_state_tek,
plD_esc_tek
},
#endif
#ifdef PLD_tek4107
{
"Tektronix File (4105/4107)",
"tek4107f",
0,
plD_init_tek4107f,
plD_line_tek,
plD_polyline_tek,
plD_eop_tek,
plD_bop_tek,
plD_tidy_tek,
plD_state_tek,
plD_esc_tek
},
#endif
#ifdef PLD_ps
{
"PostScript File (monochrome)",
"ps",
0,
plD_init_psm,
plD_line_ps,
plD_polyline_ps,
plD_eop_ps,
plD_bop_ps,
plD_tidy_ps,
plD_state_ps,
plD_esc_ps
},
{
"PostScript File (color)",
"psc",
0,
plD_init_psc,
plD_line_ps,
plD_polyline_ps,
plD_eop_ps,
plD_bop_ps,
plD_tidy_ps,
plD_state_ps,
plD_esc_ps
},
#endif
#ifdef PLD_xfig
{
"Xfig file",
"xfig",
0,
plD_init_xfig,
plD_line_xfig,
plD_polyline_xfig,
plD_eop_xfig,
plD_bop_xfig,
plD_tidy_xfig,
plD_state_xfig,
plD_esc_xfig
},
#endif
#ifdef PLD_ljii
{
"LaserJet IIp/deskjet compressed graphics",
"ljiip",
0,
plD_init_ljiip,
plD_line_ljiip,
plD_polyline_ljiip,
plD_eop_ljiip,
plD_bop_ljiip,
plD_tidy_ljiip,
plD_state_ljiip,
plD_esc_ljiip
},
{
"LaserJet II Bitmap File (150 dpi)",
"ljii",
0,
plD_init_ljii,
plD_line_ljii,
plD_polyline_ljii,
plD_eop_ljii,
plD_bop_ljii,
plD_tidy_ljii,
plD_state_ljii,
plD_esc_ljii
},
#endif
#ifdef PLD_amiga
{
"Amiga Printer (prefs settings)",
"amipr",
0,
plD_init_amipr,
plD_line_amipr,
plD_polyline_amipr,
plD_eop_amipr,
plD_bop_amipr,
plD_tidy_amipr,
plD_state_amipr,
plD_esc_amipr
},
#endif
#ifdef PLD_iff /* probably only of interest on the Amiga */
{
"IFF Graphics File",
"iff",
0,
plD_init_iff,
plD_line_iff,
plD_polyline_iff,
plD_eop_iff,
plD_bop_iff,
plD_tidy_iff,
plD_state_iff,
plD_esc_iff
},
#endif
#ifdef PLD_aegis /* probably only of interest on the Amiga */
{
"Aegis Draw File",
"aegis",
0,
plD_init_aegis,
plD_line_aegis,
plD_polyline_aegis,
plD_eop_aegis,
plD_bop_aegis,
plD_tidy_aegis,
plD_state_aegis,
plD_esc_aegis
},
#endif
#ifdef PLD_hp7470
{
"HP 7470 Plotter File (HPGL Cartridge, Small Plotter)",
"hp7470",
0,
plD_init_hp7470,
plD_line_hpgl,
plD_polyline_hpgl,
plD_eop_hpgl,
plD_bop_hpgl,
plD_tidy_hpgl,
plD_state_hpgl,
plD_esc_hpgl
},
#endif
#ifdef PLD_hp7580
{
"HP 7580 Plotter File (Large Plotter)",
"hp7580",
0,
plD_init_hp7580,
plD_line_hpgl,
plD_polyline_hpgl,
plD_eop_hpgl,
plD_bop_hpgl,
plD_tidy_hpgl,
plD_state_hpgl,
plD_esc_hpgl
},
#endif
#ifdef PLD_lj_hpgl
{
"HP Laserjet III, HPGL emulation mode",
"lj_hpgl",
0,
plD_init_lj_hpgl,
plD_line_hpgl,
plD_polyline_hpgl,
plD_eop_hpgl,
plD_bop_hpgl,
plD_tidy_hpgl,
plD_state_hpgl,
plD_esc_hpgl
},
#endif
#ifdef PLD_imp
{
"Impress File",
"imp",
0,
plD_init_imp,
plD_line_imp,
plD_polyline_imp,
plD_eop_imp,
plD_bop_imp,
plD_tidy_imp,
plD_state_imp,
plD_esc_imp
},
#endif
#ifdef PLD_null
{
"Null device",
"null",
-1,
plD_init_null,
plD_line_null,
plD_polyline_null,
plD_eop_null,
plD_bop_null,
plD_tidy_null,
plD_state_null,
plD_esc_null
}
#endif
};
static PLINT npldrivers = (sizeof(dispatch_table)/sizeof(PLDispatchTable));
#endif /* __PLCORE_H__ */